/*****************************************
**  Nom : COLLOMB - SALINAS - CARRUELLE	**
**	Nom du fichier : main.c				**
**	Description : Programme principal 	**
**				  moteur d'inférence	**
**										**
**										**
**	Date : 14/08/2014				    **
**  Statut : In Work					**
*****************************************/

/*****************************************
**  Zone de declaration des includes    **
*****************************************/

#include "struct.h"

/*****************************************
**  Zone de declaration des prototypes  **
*****************************************/

 int menu(void);
  
/*****************************************
**  Zone du programme principal         **
*****************************************/

 int main (void)
 {
 	 FILE* fp = NULL;					// Descripteur de fichier
 	 ST_RES* Tete_Res = NULL;			// Pointeur vers la tete des regles
 	 ST_FAITS* Tete_Faits = NULL;		// Pointeur vers la tete des faits
 	 char but [20];						// String qui contiendra la regle a trouver
 	 int action;
 
	 do
	 {
		 action = menu();
		 switch(action)
		 {
			 case 1 : fp = CreerListeCh_OuvrirFic(Fic_Regles,"r");
 	 			 	  if(fp!=NULL && Tete_Res == NULL )
	 				  {
		 		 	  	 //CreerListeCh_LireRegles(fp, &Tete_Res);
		 		 	  	 CreerListeCh_LireBases('R', fp, &Tete_Faits, &Tete_Res);
		 			 	 CreerListeCh_FermerFichier(fp);
		 		 	  }
				 	  break;
				 
			 case 2 : fp=CreerListeCh_OuvrirFic(Fic_Faits,"r");
	 				  if(fp!=NULL && Tete_Faits == NULL)
					  {
					 	 // CreerListeCh_LireFaits(fp, &Tete_Faits);
					 	 CreerListeCh_LireBases('F', fp, &Tete_Faits, &Tete_Res);
						  CreerListeCh_FermerFichier(fp);
					  }
					  break;
					  
			 case 3 : ChngAvt_ChainageAvant(Tete_Res, Tete_Faits);
			 		  break;
			 		  
			 case 4 : ChainArr_VerifBut (but,Tete_Res, Tete_Faits); //variable de test d'erreur existantes(1; 0; -1)
			 		  memset(but,0,MAXSIZE*sizeof(char));
			 		  break;
			 		  
			 case 5 : CreerListeCh_AfficherListe('R', Tete_Res, Tete_Faits);
			 		  CreerListeCh_AfficherListe('F', Tete_Res, Tete_Faits);
			 		  break;
			 		  
			 case 6 : CreerListeCh_FreeListe('R', Tete_Res, Tete_Faits);
	 				  CreerListeCh_FreeListe('F', Tete_Res, Tete_Faits);
	 				  return 0;
	 				  break;
		 }
	 }while (action != 6);
 }
 
 int menu(void)
 {
	 int choix = 0;
	 
	 printf("\n\t1.Lecture du fichier de règles et création de la liste chainée.\n");
	 printf("\t2.Lecture du fichier de faits et création de la liste chainée.\n");
	 printf("\t3.Lancement du chainage avant.\n");
	 printf("\t4.Lancement du chainage arrière.\n");
	 printf("\t5.Affichage de la liste des faits.\n");
	 printf("\t6.Quitter.\n");
	 printf("> ");
	 scanf("%d", &choix);

	 return choix;
 }
